package com.elephant.core.schedule.springtask;

import lombok.extern.slf4j.Slf4j;
import org.springframework.scheduling.annotation.Async;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;

/**
 * -------------------------------Spring Task----------------------------
 *
 * 可以看到三个定时任务都已经执行，并且使同一个线程中串行执行，如果只有一个定时任务，这样做肯定没问题，
 * 当定时任务增多，如果一个任务卡死，会导致其他任务也无法执行。
 *
 * 在传统的Spring项目中，我们可以在xml配置文件添加task的配置，而在SpringBoot项目中一般使用config配置类的方式添加配置，所以新建一个AsyncConfig类
 * 然后在定时任务的类或者方法上添加@Async 。最后重启项目，每一个任务都是在不同的线程中
 *
 * 在上面的定时任务中，我们在方法上使用@Scheduled注解来设置任务的执行时间，并且使用三种属性配置方式：
 *
 *      fixedRate：定义一个按一定频率执行的定时任务
 *      fixedDelay：定义一个按一定频率执行的定时任务，与上面不同的是，改属性可以配合initialDelay， 定义该任务延迟执行时间。
 *      cron：通过表达式来配置任务执行时间
 *
 * @author hai
 * @description
 * @date 11:08 2018/9/12
 */
@Async
@Slf4j
@Component
public class ScheduledService {
//    @Scheduled(cron = "0 0/5 * * * *")
//    public void scheduled(){
//        log.info("=====>>>>>使用cron  {}",System.currentTimeMillis());
//    }
//    @Scheduled(fixedRate = 50000)
//    public void scheduled1() {
//        log.info("=====>>>>>使用fixedRate{}", System.currentTimeMillis());
//    }
//    @Scheduled(fixedDelay = 50000)
//    public void scheduled2() {
//        log.info("=====>>>>>fixedDelay{}",System.currentTimeMillis());
//    }
}
